package com.jinmdz.fmis.api.wrapper;

import com.jinmdz.fmis.api.api.model.common.IdVersionData;
import com.jinmdz.fmis.api.base.BaseService;
import com.jinmdz.fmis.api.model.system.UserItem;
import com.jinmdz.fmis.common.util.BeanUtil;
import com.jinmdz.fmis.common.util.DataUtil;
import com.jinmdz.fmis.core.exception.ActionException;
import com.jinmdz.fmis.dao.dao.RecInfoDao;
import com.jinmdz.fmis.dao.dao.ServiceItemDao;
import com.jinmdz.fmis.dao.model.recactualitem.RecActualItem;
import com.jinmdz.fmis.dao.model.recselitem.RecSelItem;
import com.jinmdz.fmis.mapper.entity.RecActualItemEntity;
import com.jinmdz.fmis.mapper.entity.RecSelItemEntity;
import com.jinmdz.fmis.mapper.mapper.ChargeItemMapper;
import com.jinmdz.fmis.mapper.mapper.RecActualItemMapper;
import com.jinmdz.fmis.mapper.mapper.RecSelItemMapper;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

/**
 * 接运信息明细封装工具类
 *
 * @author GaoXiangLiang
 * @date 2020-06-17 8:16
 */
@Component
public class RecInfoWrapper extends BaseService {

    @Resource
    private ServiceItemDao serviceItemDao;

    @Resource
    private ChargeItemMapper chargeItemMapper;

    @Resource
    private RecActualItemMapper recActualItemMapper;

    @Resource
    private RecSelItemMapper recSelItemMapper;
    @Resource
    private RecInfoDao recInfoDao;

    /**
     * 插入物品服务
     *
     * @param userItem      当前帐号
     * @param goodsServices 物品服务
     * @return
     * @author GaoXiangLiang
     * @date 2020-02-14 10:17
     */
    public ArrayList<RecSelItemEntity> insertRecSelServices(UserItem userItem, ArrayList<RecSelItem> goodsServices) throws ActionException {

        // 记录新增实体
        ArrayList<RecSelItemEntity> entityList = new ArrayList<>();

        // 物品服务为空时返回
        if (DataUtil.valid(goodsServices)) {
            // 获取物品服务
            HashMap<Integer, RecSelItem> serviceMap = new HashMap<>(16);
            for (RecSelItem serviceItem : goodsServices) {
                serviceMap.put(serviceItem.getId(), serviceItem);
            }
            RecSelItemEntity recSelItemEntity = null;
            RecSelItem serviceItem = null;
            // 插入物品服务
            Set<Integer> keys = serviceMap.keySet();
            for (Integer key : keys) {
                recSelItemEntity = new RecSelItemEntity();
                serviceItem = serviceMap.get(key);
                BeanUtil.copy2Bean(serviceItem, recSelItemEntity);
                entityList.add(recSelItemEntity);
            }
        }
        return entityList;
    }

    /**
     * 更新物品服务
     *
     * @param userItem      当前帐号
     * @param goodsServices 物品服务
     * @return
     * @author GaoXiangLiang
     * @date 2020-02-14 11:04
     */
    public void updateGoodsServices(UserItem userItem, Integer recId, ArrayList<RecSelItem> goodsServices) throws ActionException {

        // 物品服务为空时返回
        if (DataUtil.valid(goodsServices)) {
            // 获取物品服务
            RecSelItemEntity recSelItemEntity = null;
            for (RecSelItem recSelItem : goodsServices) {
                recSelItemEntity = getEntity(userItem, RecSelItemEntity.class);
                String funeralParlourCode = recSelItemEntity.getFuneralParlourCode();
                BeanUtil.copy2Bean(recSelItem, recSelItemEntity);
                recSelItemEntity.setFuneralParlourCode(funeralParlourCode);
                if (recSelItem.getId().toString().equals("0")) {

                    recSelItemMapper.insertRecSelItem(recSelItemEntity);
                } else {
                    recSelItemMapper.updateRecSelItem(recSelItemEntity);
                }

            }

        }
    }

    /**
     * 删除物品服务
     *
     * @param userItem  当前帐号
     * @param recId     接运主键
     * @param deleteIds 物品服务主键
     * @return
     * @author GaoXiangLiang
     * @date 2020-03-06 09:47
     */
    public ArrayList<RecSelItemEntity> deleteGoodsServices(UserItem userItem, Integer recId, ArrayList<IdVersionData> deleteIds) throws ActionException {

        // 记录删除实体
        ArrayList<RecSelItemEntity> entityList = new ArrayList<>();

        // 当物品服务不为空时
        if (DataUtil.valid(deleteIds)) {
            ArrayList<Integer> idList = new ArrayList<Integer>();
            ArrayList<Long> versionList = new ArrayList<Long>();
            for (int i = 0; i < deleteIds.size(); i++) {
                IdVersionData item = deleteIds.get(i);
                idList.add(item.getId());
                versionList.add(item.getVersion());
            }
            // 获取物品服务
            ArrayList<RecSelItem> serviceItems = recInfoDao.listRecSelItemByRecIdAndIdList(recId, idList, versionList);
            if (!serviceItems.isEmpty()) {
                RecSelItemEntity recSelItemEntity = null;
                for (int i = 0; i < serviceItems.size(); i++) {
                    recSelItemEntity = getEntity(userItem, RecSelItemEntity.class);
                    String funeralParlourCode = recSelItemEntity.getFuneralParlourCode();
                    BeanUtil.copy2Bean(serviceItems.get(i), recSelItemEntity);
                    recSelItemEntity.setFuneralParlourCode(funeralParlourCode);
                    //判断id是否在要删除的数据中
                    entityList.add(recSelItemEntity);

                }
            }
        }
        return entityList;
    }

    /**
     * 更新物品服务
     *
     * @param userItem      当前帐号
     * @param goodsServices 物品服务
     * @return
     * @author GaoXiangLiang
     * @date 2020-02-14 11:04
     */
    public void updateActualItem(UserItem userItem, Integer recId, ArrayList<RecActualItem> goodsServices) throws ActionException {

        // 物品服务为空时返回
        if (DataUtil.valid(goodsServices)) {
            // 获取物品服务
            RecActualItemEntity recActualItemEntity = null;
            for (RecActualItem recSelItem : goodsServices) {
                recActualItemEntity = getEntity(userItem, RecActualItemEntity.class);
                String funeralParlourCode = recActualItemEntity.getFuneralParlourCode();
                BeanUtil.copy2Bean(recSelItem, recActualItemEntity);
                recActualItemEntity.setFuneralParlourCode(funeralParlourCode);
                if (recSelItem.getId().toString().equals("0")) {
                    recActualItemMapper.insertRecActualItem(recActualItemEntity);
                } else {
                    recActualItemMapper.updateRecActualItem(recActualItemEntity);
                }

            }

        }
    }

    /**
     * 删除物品服务
     *
     * @param userItem  当前帐号
     * @param recId     接运主键
     * @param deleteIds 物品服务主键
     * @return
     * @author GaoXiangLiang
     * @date 2020-06-06 09:47
     */
    public ArrayList<RecActualItemEntity> deleteActualItem(UserItem userItem, Integer recId, ArrayList<IdVersionData> deleteIds) throws ActionException {

        // 记录删除实体
        ArrayList<RecActualItemEntity> entityList = new ArrayList<>();

        // 当物品服务不为空时
        if (DataUtil.valid(deleteIds)) {
            // 获取物品服务
            ArrayList<RecActualItem> recActualItem = recInfoDao.listRecActualItemByRecId(recId);
            if (!recActualItem.isEmpty()) {
                RecActualItemEntity recActualItemEntity = null;
                for (int i = 0; i < recActualItem.size(); i++) {
                    recActualItemEntity = getEntity(userItem, RecActualItemEntity.class);
                    String funeralParlourCode = recActualItemEntity.getFuneralParlourCode();
                    BeanUtil.copy2Bean(recActualItem.get(i), recActualItemEntity);
                    recActualItemEntity.setFuneralParlourCode(funeralParlourCode);
                    entityList.add(recActualItemEntity);
                }
            }
        }
        return entityList;
    }
}
